package com.office.stacks.pubilsh.service.impl;

import java.util.List;

import com.office.common.utils.SecurityUtils;
import com.office.web.controller.file.mapper.FileUploadMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.office.stacks.pubilsh.mapper.TasksMapper;
import com.office.stacks.pubilsh.domain.Tasks;
import com.office.stacks.pubilsh.service.ITasksService;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;

/**
 * 任务发布Service业务层处理
 *
 * @author 柒月
 * @date 2025-05-22
 */
@Service
public class TasksServiceImpl implements ITasksService {

    @Resource
    private TasksMapper tasksMapper;

    @Autowired
    private FileUploadMapper fileUploadMapper;

    /**
     * 查询任务发布
     *
     * @param id 任务发布主键
     * @return 任务发布
     */
    @Override
    public Tasks selectTasksById(Long id) {
        return tasksMapper.selectTasksById(id);
    }

    /**
     * 查询任务发布列表
     *
     * @param tasks 任务发布
     * @return 任务发布
     */
    @Override
    public List<Tasks> selectTasksList(Tasks tasks) {

        // 获取当前的登录用户id
        Long loginUserId = SecurityUtils.getUserId();

        // 查看当前登录用户的任务发布情况
        return tasksMapper.selectTasksList(tasks, loginUserId);
    }

    /**
     * 新增任务发布
     *
     * @param tasks  任务发布
     * @param userId 被邀请人ids
     * @return 结果
     */
    @Override
    public int insertTasks(Tasks tasks, Long[] userId) {

        // 获取当前登录用户
        Long loginUserId = SecurityUtils.getUserId();
        // 设置发布人
        tasks.setPublisherId(loginUserId);
        // 判断是否是对用户发布还是发布到任务中心让用户自己去接任务
        if (userId != null) {
            // 精准的对某个用户发布
            return tasksMapper.insertTasks(tasks, userId);
        }
        // 让用户自己去接任务,发布到任务中心
        return tasksMapper.insertTasksCenter(tasks);
    }

    /**
     * 修改任务发布
     *
     * @param tasks 任务发布
     * @return 结果
     */
    @Override
    public int updateTasks(Tasks tasks) {
       return tasksMapper.updateTasks(tasks);
    }

    /**
     * 批量删除任务发布
     *
     * @param ids     需要删除的任务发布主键
     * @param fileIds 删除任务
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int deleteTasksByIds(Long[] ids, Long[] fileIds) {
        // 删除任务
        tasksMapper.deleteTasksByIds(ids);
        // 删除数据看中的文件，没有删除远程的
        return fileUploadMapper.deleteFileByIds(fileIds);
    }


    /**
     * 修改任务表中的文件id为null
     *
     * @param id 文件id
     * @return 结果
     */
    @Override
    public int updateFileId(Long id) {
        return tasksMapper.updateFileId(id);
    }
}
